
package com.udc.medLine.transaction;

import java.util.List;

import com.udc.medLine.entity.Cidade;
import com.udc.medLine.entity.CondicaoVO;
import com.udc.medLine.entity.Endereco;
import com.udc.medLine.entity.Perfil;
import com.udc.medLine.entity.Funcionario;
import com.udc.medLine.factory.FactoryCidade;
import com.udc.medLine.factory.FactoryPerfil;
import com.udc.medLine.factory.FactoryFuncionario;
import com.udc.medLine.persistence.Bd;

public class TransactionFuncionario {

	private Funcionario funcionario;
	private Cidade cidade;
	private Perfil perfil;
	private List listFuncionario;
	private List listPerfil;
	private List listCidade;
	private Bd banco;
	
	/**
	 * 
	 */
	public TransactionFuncionario() {
		super();
		funcionario = new Funcionario();
		perfil = new Perfil();
		cidade = new Cidade();
		try{
			
		   banco = Bd.getInstance();
		  
		}
		catch(Exception e){
			e.printStackTrace();
		}
		// TODO Stub de construtor gerado automaticamente
	}

	public Funcionario getFuncionario() {
		return funcionario;
	}

	public void setFuncionario(Funcionario new_funcionario) {
		this.funcionario = new_funcionario;
	}

	public void remover(Funcionario nFuncionario) throws Exception {
		banco.beginTransaction();
			FactoryFuncionario factory = new FactoryFuncionario();
			funcionario.setId(nFuncionario.getId());
			factory.setFuncionario(funcionario);
			factory.setFuncionario(factory.obterFuncionario());
			factory.delete();
		banco.commit();
	}

	public void inserir(Funcionario nFuncionario) throws Exception {
		banco.beginTransaction();
			FactoryFuncionario factory = new FactoryFuncionario();
			FactoryPerfil factoryPerfil = new FactoryPerfil();
			FactoryCidade factoryCidade = new FactoryCidade();
			Endereco endereco = new Endereco();
			funcionario.setNome(nFuncionario.getNome());				
			funcionario.setCpf(nFuncionario.getCpf());
			funcionario.setEmail(nFuncionario.getEmail());
			funcionario.setMatricula(nFuncionario.getMatricula());
			funcionario.setRg(nFuncionario.getRg());
			funcionario.setSenha(nFuncionario.getSenha());
			funcionario.setTelefone(nFuncionario.getTelefone());
			funcionario.setUsuario(nFuncionario.getUsuario());
			
			endereco.setBairro(nFuncionario.getEndereco().getBairro());
			endereco.setCep(nFuncionario.getEndereco().getCep());
			endereco.setComplemento(nFuncionario.getEndereco().getComplemento());
			endereco.setNumero(nFuncionario.getEndereco().getNumero());
			endereco.setRua(nFuncionario.getEndereco().getRua());
		
			cidade.setId(nFuncionario.getEndereco().getCidade().getId());
			factoryCidade.setCidade(cidade);
			cidade = factoryCidade.obterCidade();
			endereco.setCidade(cidade);
			
			funcionario.setEndereco(endereco);			
		
			perfil.setId(nFuncionario.getPerfil().getId());
			factoryPerfil.setPerfil(perfil);
			perfil = factoryPerfil.obterPerfil();
			funcionario.setPerfil(perfil);
			
			factory.setFuncionario(funcionario);
			factory.insert();
		banco.commit();
	}

	public void atualizar(Funcionario nFuncionario) throws Exception {
		banco.beginTransaction();
		FactoryFuncionario factory = new FactoryFuncionario();
		FactoryPerfil factoryPerfil = new FactoryPerfil();
		FactoryCidade factoryCidade = new FactoryCidade();
		Endereco endereco = new Endereco();
		
		funcionario.setId(nFuncionario.getId());
		funcionario.setNome(nFuncionario.getNome());				
		funcionario.setCpf(nFuncionario.getCpf());
		funcionario.setEmail(nFuncionario.getEmail());
		funcionario.setMatricula(nFuncionario.getMatricula());
		funcionario.setRg(nFuncionario.getRg());
		funcionario.setSenha(nFuncionario.getSenha());
		funcionario.setTelefone(nFuncionario.getTelefone());
		funcionario.setUsuario(nFuncionario.getUsuario());
		
		endereco.setBairro(nFuncionario.getEndereco().getBairro());
		endereco.setCep(nFuncionario.getEndereco().getCep());
		endereco.setComplemento(nFuncionario.getEndereco().getComplemento());
		endereco.setNumero(nFuncionario.getEndereco().getNumero());
		endereco.setRua(nFuncionario.getEndereco().getRua());
	
		cidade.setId(nFuncionario.getEndereco().getCidade().getId());
		factoryCidade.setCidade(cidade);
		cidade = factoryCidade.obterCidade();
		endereco.setCidade(cidade);
		
		funcionario.setEndereco(endereco);			
	
		perfil.setId(nFuncionario.getPerfil().getId());
		factoryPerfil.setPerfil(perfil);
		perfil = factoryPerfil.obterPerfil();
		funcionario.setPerfil(perfil);
		
		factory.setFuncionario(funcionario);
			factory.update();
		banco.commit();
	}


	public void obterListaFuncionario(String campo, String valor) throws Exception{
		banco.beginTransaction();
			FactoryFuncionario factory = new FactoryFuncionario();
			factory.setFuncionario(new Funcionario());
			listFuncionario = factory.getFuncionario(campo,valor);
		banco.commit();
	}
	
	public void obterListaFuncionario() throws Exception{
		banco.beginTransaction();
			FactoryFuncionario factory = new FactoryFuncionario();
			factory.setFuncionario(new Funcionario());
			listFuncionario = factory.getListaFuncionarios();
		banco.commit();
	}
	
	public void obterFuncionario(Funcionario nFuncionario) throws Exception{
		banco.beginTransaction();
			FactoryFuncionario factory = new FactoryFuncionario();
			funcionario.setId(nFuncionario.getId());
			factory.setFuncionario(funcionario);
			funcionario = factory.obterFuncionario();
		banco.commit();
	}
	
	public void obterListaPerfil() throws Exception{
		banco.beginTransaction();
			FactoryPerfil factory = new FactoryPerfil();
			listPerfil = factory.getListaPerfil();
		banco.commit();
	}
	
	public void obterListaCidade() throws Exception{
		banco.beginTransaction();
			FactoryCidade factory = new FactoryCidade();
			listCidade = factory.getListaCidade();
		banco.commit();
	}
	
	/**
	 * @return
	 */
	public List getListFuncionario() {
		return listFuncionario;
	}

	/**
	 * @param list
	 */
	public void setListFuncionario(List list) {
		listFuncionario = list;
	}

	/**
	 * @return
	 */
	public Perfil getPerfil() {
		return perfil;
	}

	/**
	 * @param perfil
	 */
	public void setPerfil(Perfil perfil) {
		this.perfil = perfil;
	}

	/**
	 * @return Returns the listPerfil.
	 */
	public List getListPerfil() {
		return listPerfil;
	}
	/**
	 * @param listPerfil The listPerfil to set.
	 */
	public void setListPerfil(List listPerfil) {
		this.listPerfil = listPerfil;
	}
	/**
	 * @return the listCidade
	 */
	public List getListCidade() {
		return listCidade;
	}

	/**
	 * @param listCidade the listCidade to set
	 */
	public void setListCidade(List listCidade) {
		this.listCidade = listCidade;
	}

	public List<Funcionario> search(CondicaoVO condicao) throws Exception {
		banco.beginTransaction();
		 
		FactoryFuncionario factory = new FactoryFuncionario();
		listFuncionario = factory.search(condicao);
		banco.commit();
		return listFuncionario;
	}
}
